
#include "ShapeManager.h"
#include "Canvas.h"

int main(int argc, char* argv[])
{
  Canvas canvas;
  // 添加两个黑色的矩形和圆形
  canvas.AddShape(ShapeManager::get_shape("REC"));
  canvas.AddShape(ShapeManager::get_shape("CIR"));

  // 将黑色矩形的原型变为红色
  ShapeManager::get_prototype("REC")->set_color("红色");
  // 向canvas中添加的矩形将是红色矩形的复制品，这样保证了原型矩形（红色矩形）的稳定性，
  // 同时又方便大量创建红色矩形对象
  canvas.AddShape(ShapeManager::get_shape("REC"));

  // 由于canvas使用list维护所有的形状，这句代码选中了上两句代码添加的红色矩形
  // 并将其颜色改为紫色，这句代码执行完毕后canvas只有被选中的紫色矩形和没有被选中的黑色圆形和矩形
  // 各一个。
  canvas.Select(2)
        ->set_color("紫色");

  // 如上分析，这句代码执行完毕后，canvas上的形状为有三个，紫色矩形，蓝色圆形，黑色矩形。
  canvas.Select(1)
        ->set_color("蓝色");
  canvas.Select(0);

  // 模拟canvas上选中的形状被复制了一份。
  canvas.OnDrag();

  // 结果是两个黑色矩形，两个蓝色圆形，两个紫色矩形。
  canvas.Show();
  return 0;
}
